package cn.piesat.scanning.business.common;

import cn.piesat.scanning.service.HtDynamicParameterService;
import cn.piesat.scanning.service.HtFixedParameterService;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.Map;

/**
 * 算法执行方式抽象类，提供选择插件、获得输入参数、专业处理插件规则参数的方法。
 * 每个项目必须继承该抽象类，并在使用时写入配置文件当中，指定反射的类，统一调用的为selectAlgorithm方法。
 * 若在子类中使用了注入方式，需要将该子类注入到Spring中管理，否则反射时会有空指针异常。
 * 该类中已经实现了获取输入参数和专业处理插件规则参数的方法，按需使用。
 * @author xhl
 */
public abstract class AlgorithmExecAbstract {

    @Autowired
    private HtDynamicParameterService htDynamicParameterService;
    @Autowired
    private HtFixedParameterService htFixedParameterService;

    /**
     * 选择执行的插件和方式，需要每个继承该抽象类的子类实现。
     * @param taskId 任务ID
     */
    public abstract void selectAlgorithm(String taskId);

    /**
     * 重做单个记录文件或流程。如需使用手动重做单个数据，需要实现该方法
     * @param recordId 任务记录ID
     */
    public abstract void redo(String recordId);

    /**
     * 获得输入参数
     * @return
     */
    public Map<String,Object> getInputParams(String taskId) {
        return htDynamicParameterService.findByDynamictaskId(taskId);
    }

    /**
     * 获得专业处理插件的规则参数
     * @return
     */
    public Map<String,Object> getProcessRule(String taskId) {
        return htFixedParameterService.findByFixedtaskId(taskId);
    }

}
